//
//  ViewController.m
//  VerificationCode
//
//  Created by 胡岩 on 15/8/20.
//  Copyright (c) 2015年 胡岩. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic, strong) UILabel *checkCodeNumberLabel;

@property(nonatomic, strong) NSString *code;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _checkCodeNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 400, 100, 30)];
    [self.view addSubview:_checkCodeNumberLabel];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapToGenerateCode:)];
    [self.view addGestureRecognizer:tap];
}

- (void)onTapToGenerateCode:(UITapGestureRecognizer *)tap {
    for (UIView *view in self.checkCodeNumberLabel.subviews) {
        [view removeFromSuperview];
    }
    // @{
    // @name 生成背景色
    float red = arc4random() % 100 / 100.0;
    float green = arc4random() % 100 / 100.0;
    float blue = arc4random() % 100 / 100.0;
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:0.2];
    [self.checkCodeNumberLabel setBackgroundColor:color];
    // @} end 生成背景色
    
    // @{
    // @name 生成文字
    const int count = 5;
    char data[count];
    for (int x = 0; x < count; x++) {
        int j = '0' + (arc4random_uniform(75));
        if((j >= 58 && j <= 64) || (j >= 91 && j <= 96)){
            --x;
        }else{
            data[x] = (char)j;
        }
    }
    NSString *text = [[NSString alloc] initWithBytes:data
                                              length:count encoding:NSUTF8StringEncoding];
    self.code = text;
    // @} end 生成文字
    
    NSDictionary *dic = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:16] forKey:NSFontAttributeName];
    
//    CGSize cSize = [@"S" sizeWithFont:[UIFont systemFontOfSize:16]];
    CGSize cSize = [@"S" sizeWithAttributes:dic];
    int width = self.checkCodeNumberLabel.frame.size.width / text.length - cSize.width;
    int height = self.checkCodeNumberLabel.frame.size.height - cSize.height;
    CGPoint point;
    float pX, pY;
    for (int i = 0, count = (int)text.length; i < count; i++) {
        pX = arc4random() % width + self.checkCodeNumberLabel.frame.size.width / text.length * i - 1;
        pY = arc4random() % height;
        point = CGPointMake(pX, pY);
        unichar c = [text characterAtIndex:i];
        UILabel *tempLabel = [[UILabel alloc]
                              initWithFrame:CGRectMake(pX, pY,
                                                       self.checkCodeNumberLabel.frame.size.width / 4,
                                                       self.checkCodeNumberLabel.frame.size.height)];
        tempLabel.backgroundColor = [UIColor clearColor];
        
        // 字体颜色
        float red = arc4random() % 100 / 100.0;
        float green = arc4random() % 100 / 100.0;
        float blue = arc4random() % 100 / 100.0;
        UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
        
        NSString *textC = [NSString stringWithFormat:@"%C", c];
        tempLabel.textColor = color;
        tempLabel.text = textC;
        [self.checkCodeNumberLabel addSubview:tempLabel];
    }
    
    // 干扰线
//    CGContextRef context = UIGraphicsGetCurrentContext();
//    CGContextSetLineWidth(context, 1.0);
//    for(int i = 0; i < count; i++) {
//        red = arc4random() % 100 / 100.0;
//        green = arc4random() % 100 / 100.0;
//        blue = arc4random() % 100 / 100.0;
//        color = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
//        CGContextSetStrokeColorWithColor(context, [color CGColor]);
//        pX = arc4random() % (int)self.checkCodeNumberLabel.frame.size.width;
//        pY = arc4random() % (int)self.checkCodeNumberLabel.frame.size.height;
//        CGContextMoveToPoint(context, pX, pY);
//        pX = arc4random() % (int)self.checkCodeNumberLabel.frame.size.width;
//        pY = arc4random() % (int)self.checkCodeNumberLabel.frame.size.height;
//        CGContextAddLineToPoint(context, pX, pY);
//        CGContextStrokePath(context);
//    }
    return;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
